JPA
全稱是Java Persistence API是一個標準規範及接口(API)來實現ORM(object-relational mapping)框架,JPA通過註解(annotation) [如:@Entity、@Table、@Column等註解] 或XML描述物件-關係表的對映關係,並將執行期的實體物件持久化到資料庫中。
JPA的出現有兩個原因:
1,簡化現有Java EE和Java SE應用的物件持久化的開發工作;
2,Sun希望整合對ORM技術,實現持久化領域的統一。
JPA不是一種框架,而是一個標準規範。而要使用JPA的功能就需要Provider來配合,而Provider就是各種ORM框架。
如下圖所示:
在JPA底下其實有各種ORM框的選擇,可按項目的情況選擇合適的框(例如:hibernate)。
JPA已經被廣泛採用,已經成為O/R持久化企業標準。
JPA是獨立於SQL ,基於JDBC之上的抽象層。所有類和註解都在javax.persistence包中。
JPA的優勢
標準化
JPA 是 JCP 組織發佈的 Java EE 標準之一,因此任何聲稱符合 JPA 標準的框架都遵循同樣的架構,提供相同的訪問API,這保證了基於JPA開發的企業應用能夠經過少量的修改就能夠在不同的JPA框架下運行。
容器級特性的支持
JPA框架中支持大數據集、事務、併發等容器級事務,這使得 JPA 超越了簡單持久化框架的局限,在企業應用發揮更大的作用。
簡單方便
JPA的主要目標之一就是提供更加簡單的編程模型:在JPA框架下創建實體和創建Java 類一樣簡單,沒有任何限制,只需要使用 javax.persistence.Entity進行註釋,JPA的框架和接口也都非常簡單,沒有太多特別的規則和設計模式的要求,開發者可以很容易的掌握。JPA基於非侵入式原則設計,因此可以很容易的和其它框架或者容器集成。
查詢能力
JPA的查詢語言是面向對象而非面向數據庫的,它以面向對象的自然語法構造查詢語句,可以看成是Hibernate HQL的等價物。JPA定義了獨特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴展,它是針對實體的一種查詢語言,操作對象是實體,而不是關係數據庫的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級查詢特性,甚至還能夠支持子查詢。
高級特性
JPA 中能夠支持面向對象的高級特性,如類之間的繼承、多態和類之間的複雜關係,這樣的支持能夠讓開發者最大限度的使用面向對象的模型設計企業應用,而不需要自行處理這些特性在關係數據庫的持久化。
參考文章/網站/書本: